home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 051-075 / disk_069 / asm68k / asm68k.doc < prev    next >
Text File  |  1992-05-06  |  54KB  |  1,144 lines

  1.  
  2.             Asm68k    68000 Macro Assembler
  3.                 Version 1.0.3
  4.                     Docs
  5.  
  6.                   Date:  24-Apr-87
  7.  
  8.                    NOTICE:
  9.  
  10.        THIS FILE AND THE PROGRAM IT DESCRIBES ARE COPYRIGHT © 1987,
  11.     W. WESLEY HOWE. ALL RIGHTS RESERVED. A LICENSE FOR USE AND
  12.     DISTRIBUTION WITHOUT PROFIT IS GRANTED TO POSSESSOR OF THIS FILE.
  13.     NO RIGHT OF ALTERATION OF THE PROGRAM OR DOCUMENTATION IS CONVEYED
  14.     WITH THIS LICENSE.
  15.        NO WARRANTY IS EXPRESSED OR IMPLIED HEREIN ON THE SUITABILITY
  16.     OF THIS PROGRAM FOR ANY PURPOSE AT ALL. YOU MUST RELY ON YOUR OWN
  17.     JUDGEMENT AS TO WHETHER THIS PROGRAM WILL OPERATE PROPERLY WITH
  18.     YOUR COMPUTER FOR WHATEVER PURPOSE YOU MAY DESIRE TO USE IT FOR.
  19.  
  20.                  ADDRESS ALL QUESTIONS, COMMENTS OR CRITICISM TO:
  21.  
  22.                   WESLEY HOWE
  23.                    4800 LAKEMONT DR.
  24.                   RALEIGH,  NC  27609
  25.  
  26.    (I may also be found at the Software Distillery's board (919) 471-6436,
  27. MMS at (919) 779-6674 or (919) 772-9176 or (919) 779-5059, or ocassionally
  28. on PLink (OPS833) and CIS (73277,260), although my appearances at the
  29. last two are more erratic.)
  30.  
  31. =============================================================================
  32.  
  33.                 LIMITS:
  34.  
  35.     Source-line length:        255 bytes (including newline)
  36.     Sub-expression length:         40 bytes
  37.     Parenthesis nesting:         16 levels
  38.     Symbol length:             31 bytes
  39.     Macro Size:          8,190 bytes
  40.     Number of Macros:            Available RAM
  41.     Number of Symbols:            Available RAM
  42.     Available RAM:          1,056,768 bytes maximum heap utilized
  43.     Macro Nesting:              8 levels
  44.     Include Nesting:          8 levels
  45.     Conditional Nesting:         16 levels
  46.     Macro Parameters:         10 per invocation
  47.     Sections:            255 maximum
  48.     Program size:         78,024 bytes (loaded)
  49.     Minimum free heap:     28,162 bytes
  50.     Total RAM necessary:    106,186 bytes
  51.     Constant size:            255 bytes
  52.     Storage size:         65,535 bytes
  53.     Strings:            255 bytes (or line length limit)
  54.     Minimum stack:          8,192 (recommended)
  55.     Operating System:        AmigaDOS 1.2 (CLI Only)
  56.  
  57. ==============================================================================
  58.  
  59.    If you are an experienced 68000 Assembly language programmer, you will find
  60. much of this material useful in understanding assembly language programming
  61. on the AMIGA. If you are an experienced AMIGA assembly language programmer,
  62. you may find much of the material boring, and will only want to use this as
  63. a reference document. If you don't know assembly language, then this document
  64. will not teach it, so you may need to get one of a number available reference
  65. books on MC68000 assembly language programming.
  66.    In the following sections, Directives, Commands, Expressions and
  67. Mnemonics are referred to. A Directive or Command is an instruction to
  68. the assembler which causes a specific action to be performed. Some of these
  69. add data to the object file, and some only affect the way assembly operations
  70. are performed. A Mnemonic is the Pseudo-English abbreviation for an in-
  71. struction the assembler is to translate into the appropriate numeric sequence
  72. and include in the object file for the MC68000 processor to perform later,
  73. when your program is run. An expression refers to any sequence of items
  74. consisting of numbers, symbols with a numerical value, and the allowable math
  75. operators which can be reduced to a single number value.
  76.  
  77. ==============================================================================
  78.  
  79.             Math & Logic Operators:
  80.  
  81.      +    Addition          -    Subtraction or Negation
  82.      ~    NOT            <<    Left shift
  83.     >>    Right shift         &    AND
  84.      |    OR             !    OR  (for compatability)
  85.      ^    XOR (Exclusive OR)     /    Integer Division
  86.     %%    Integer Modulo         *    Integer Multiplication or
  87.                         Current Program Counter Location
  88.  
  89.    Like the Rotomola assembler, all expressions evaluate in strict Left-to-
  90. Right order, as divided by parentheses. The Unary operators '-' and '~' need
  91. to be offset from any adjacent operators with parentheses. Symbols and
  92. constants may be mixed, and space or tab characters may be included. No
  93. individual portion of the expression may exceed 40 characters (NOTE: a
  94. 'portion' would be any symbol or number alone.)
  95.  
  96. Some examples:
  97.     4+(7*2)        Yields  56    4 + ( 7 * 2 )    Yields  56
  98.     4+7*2        Yields  22    -4*6        Yields -24
  99.     6*-4        Error        4(6*7)        Error
  100.     ('A'+1)        Yields  66    "A" + 1        Yields 194
  101.     'ASDF'+0    Yields  1,095,976,006
  102.  
  103. Program Counter: The symbol * can be used as shorthand for the current
  104. PC (relative offset) under the following criteria:
  105.     1> It is the FIRST (or only) character in an expression or
  106.     2> It is the second half of a binary operator (i.e. after
  107.        a valid math operator, with or without parentheses.)
  108.  
  109.    Expressions that use the * or any symbol that refers to a relative
  110. or external operation may only use plus and minus for math operations.
  111. Any combinations within an expression that result in a value that will
  112. not always generate reliable usage of relative locations will be flagged
  113. with an expression error message.
  114.  
  115. ===============================================================================
  116.  
  117.             Numbers and Constants:
  118.  
  119.     Binary:        A binary number is either [1] prefixed with the '%'
  120.             (percent) character, or [2] followed immediately with
  121.             the letter 'B' (UPPER or lower case). It may contain
  122.             only the digits '1' or '0'.
  123.     Octal:        An octal number is either [1] prefixed with the '@'
  124.             (at) character, or [2] followed immediately with either
  125.             the letter 'O' or the letter 'Q', in either case.
  126.             Only the digits '0' through '7' are valid.
  127.     Decimal:    A decimal number contains only the digits '0' through
  128.             '9', and may be optionally followed immediately with
  129.             the letter 'D' (either case.)
  130.     Hexa-Decimal:    HexaDecimal numbers contain the digits '0' through '9',
  131.             and the letters 'A' through 'F' (in either UPPER or
  132.             lower case.) They may be [1] prefixed with the '$'
  133.             (Dollar) character, or [2] they must start with a digit
  134.             and be followed immediately with either the letter 'H'
  135.             or the letter 'X', in either UPPER or lower case. A
  136.             leading '0' may be prefixed for the post-fix form.
  137.  
  138.    Leading zeros do not affect the value of any of the number forms, although
  139. the 40 character limit applies to them also.
  140.  
  141.     Characters:    Multiple ascii character may be included by enclosing
  142.             them in QUOTES. The single quote will yield an ascii
  143.             value, and the double quote will yield an ascii value
  144.             with bit 7 SET (or'd with 128). Multiple byte constants
  145.             are evaluated by successive left-shifts. Only the last
  146.             4 characters are retained as a 32-bit value.
  147.  
  148. Some Examples:    The number 1,000 (one thousand) may be represented
  149.         any one of the following ways:
  150.  
  151.         1111101000B    01111101000b    %1111101000
  152.         1750Q        01750o        @1750
  153.         1000D        0001000d    1000
  154.         3e8H        03E8h        $3e8
  155.         'E0'-'AH'
  156.  
  157. ==============================================================================
  158.  
  159.             Assembly Line Format:
  160.  
  161.    An input assembly line follows the following models:
  162.  
  163. Label1        Mnemonic    Operand , MoreOperands ;comment
  164.  Label2:    Mnemonic    Operand
  165.         Mnemonic    Operand
  166. Label3:        Mnemonic
  167. LabelOnly
  168. *                     a comment only
  169.     ;                another comment
  170.  
  171.    Note that the LABEL either starts in the first column, or is followed by
  172. a colon. The Mnemonic field is separated by at least one space or tab, and
  173. never starts in the first column. Operands, where needed, follow, separated
  174. from the Mnemonic by at least one space or tab. Multiple operands are
  175. separated from each other by a comma (the comma flags the assembler that
  176. there is another operand available.) An asterisk in the first position on the
  177. line indicates a comment only line, or comments may follow complete operands
  178. with a semicolon separator. Assembler directives occupy the Mnemonic position,
  179. and comments are optional. Labels are allowed on all lines, and are required
  180. for some assembler directives.
  181.  
  182. ==============================================================================
  183.  
  184.                 Constants:
  185.  
  186.    The following Assembler directives cause the inclusion of data in the
  187. Object file:
  188.  
  189.     DB    Yields 8-bit values. Either STRINGS, Symbols, Labels, numbers
  190.         or expressions may be evaluated. Multiple operands need to be
  191.         separated by commas, and generate successive bytes up to
  192.         a limit of 255 bytes (the line-length limit should prevent
  193.         this from ever being reached.)
  194.     DW    Yields 16-bit values, in Hi-Lo order. The format is the same
  195.         as the DB directive, except STRINGS will not be evaluated.
  196.         If the address is not a word address, a pad byte will be
  197.         appended to the previous line, and a non-fatal error message
  198.         will be issued.
  199.     DL    Yields 32-Bit values. Otherwise equivalent to DW.
  200.     DC    This directive is the same as DW. Appending .L or .B (in
  201.         either case) will change the function to be the same as
  202.         DL or DB, respectively. (DC.W is legal.)
  203.     ASCII    This command yields a sequence of bytes equivalent to the
  204.         ascii value of the operands (delimited by quotes) provided.
  205.         Single quotes will yield the normal value, and double quotes
  206.         will yield values with bit 7 SET. Within the delimited
  207.         STRING, a '\' (backslash) character, followed by up to three
  208.         decimal digits will cause inclusion of a byte with the same
  209.         numerical value, or if followed by any other character will
  210.         allow the inclusion of that character immediately following.
  211.         (This is useful for including quotes and backslashes in the
  212.         string.) A limit of 255 values applies.
  213.     CSTRING    This command is the same as ASCII, except an additional byte
  214.         with the value 0 is appended (as in the C language.)
  215.     PSTRING    This is the same as ASCII also, except a leading byte with
  216.         a value equal to the number of bytes following is prepended
  217.         (as used in the PASCAL language).
  218.     ISTRING This variant of ASCII will cause the final character to have
  219.         it's most significant bit of the opposite (INVERTED) value
  220.         from the rest of the characters in the string (as defined by
  221.         the delimiting quotes). This form is popular among 8-bit
  222.         machines, and some BASIC interpreters. It's usefulness with
  223.         the new international 8-bit standard ASCII is questionable,
  224.         but it may be helpful, so it has been included anyway.
  225.     DCB    This command accepts the .B .W and .L size specifiers (or
  226.         defaults to WORD.) It generates as many values as the operand
  227.         expression evaluates to (up to 255 bytes total), of the size
  228.         specified. WORD and LONG sizes are forced to an even address
  229.         alignment.
  230.  
  231. ==============================================================================
  232.  
  233.             Symbol and Labels:
  234.  
  235.    A Label is an address designator. It is placed before a mnemonic or a
  236. data location, and acquires a value equal to the relative program counter
  237. value at that location. A standard Label may only be defined this way once
  238. in a program, but may be referenced as many times as needed. It must start
  239. with a letter, a period or the '_' (underscore) character, and may contain
  240. only these characters, or the digits '0' through '9', without spaces up to
  241. a total of 31 characters. When you define a label, it must appear as the
  242. very first item on a line, or you must append a ':' (colon) character to it.
  243. (You may have the colon in the first case also.) You must not use the colon
  244. on the label other than when you define it, or you may get an erroneous
  245. interpretation of your expression.
  246.    A Symbol starts off looking like a label, and follows the same rules, except
  247. the following commands modify it to acquire a new type and value:
  248.  
  249.     EQUATE    Sets a permanent, absolute value equal to the value of the
  250.         expression following this directive. STRING values are not
  251.         allowed.
  252.     SETVAL    Sets an absolute value which is retained until a new value is
  253.         set. You may not later use EQUATE on this label, but you can
  254.         EQUATE a different label to the set value.
  255.     EQUR    Gives a value to the symbol which may later be used in place
  256.         of a standard data or address register. This is valid only
  257.         for D0-D7 or A0-A7 (SP is a synonym for A7). You cannot use
  258.         this value other than to reference a register in a MC68000
  259.         mnemonic.
  260.     REG    Accepts a register-list operand for use with the MOVEM
  261.         mnemonic. A register-list looks like this:
  262.  
  263.             A2-A7/D1/D3-D7
  264.  
  265.         Which defines the registers A2 through A7, D1 and D3 through
  266.         D7. In fact, all the registers except A0, A1, D0 and D2. Only
  267.         the standard address and data registers may be defined in this
  268.         fashion.
  269.     MACRO    Assigns a sequence of input lines, with replacable parameters,
  270.         which will later be substituted for any line which uses this
  271.         symbol as a mnemonic or command. More on Macros later.
  272.  
  273.     These Directives must have a Label in the Label Field for assignment,
  274. except for MACRO, which may have it's name in the operand slot.
  275.  
  276.    You must avoid referencing a symbol before giving it a value, or the 
  277. assembler will complain (sometimes), because the forward reference will make
  278. it type the symbol as a label, which is an address, not a number. Labels, of
  279. course, may be referenced before use, and it's value will be substituted on
  280. the second pass. In fact, this is the only reason you need a two-pass
  281. assembler.
  282.  
  283. =============================================================================
  284.  
  285.             Local (Numeric) Labels:
  286.  
  287.    A line may be labeled with a special Local Label which attaches itself to
  288. a specific offset from the last proper line label, as previously described.
  289. A Local Label is a sequence of up to three decimal digits followed by the
  290. '$' (Dollar) character. Like a regular Label, if it does not start at the
  291. beginning of the line, it must be followed by a colon.
  292.    A Local Label may be referenced in an operand anywhere a line Label would,
  293. but it's scope is only between one regular Label and the next. Each time a
  294. new regular Label is used, the Local Label may then be redefined and reused
  295. with a different value.
  296.  
  297.    An example:
  298.  
  299. Start    Jsr    Initialize_Data
  300. 001$    Jsr    Initialize_Serial
  301.     Move.b    D1,ChangeFlag
  302.     Cmp.b    #0ffh,D1
  303.     Bne    1$
  304.  
  305.    Note that 001$ and 1$ will evaluate to the same location. You need not
  306. start with one and may use any numbers you desire, as long as their value
  307. does not exceed 999. Also, note that $1 and 1$ are interpreted differently;
  308. the first is an absolute expression, and the second is a relative address.
  309. Local Labels may not be used for Macro names, although they may be used
  310. within Macros, and cannot be used to represent Numbers, EXTERNal or ENTRY
  311. types.
  312.  
  313. ==============================================================================
  314.  
  315.            Conditional Assembly Directives:
  316.  
  317.    The following Commands allow assembly to proceed until a matching ENDIF
  318. Directive is found, or disable assembly until the ENDIF is reached if the
  319. condition is not met:
  320.  
  321.     IFEQ    Expression EQuals zero. (e.g. 4-4)
  322.     IFGE    Expression Greater than or Equal to zero. (e.g. 4-4 or 4-3)
  323.     IFGT    Expression Greater Than zero. (e.g. 4-3)
  324.     IFLE    Expression Less than or Equal to zero. (e.g. 4-4 or 4-5)
  325.     IFLT    Expression Less Than zero. (e.g. 4-5)
  326.     IFNE    Expression is Not Equal to zero. (e.g. 4-5 or 4-3)
  327.  
  328.    The above conditionals are evaluated to 32 bits, but the condition decision
  329. is based on their WORD (16-bit) value.
  330.  
  331.     IFD    Label following was already Defined (not just referenced.)
  332.     IFND    Label following has Not yet been Defined.
  333.     IFC    Both STRINGS following Compare (same length and characters.)
  334.     IFNC    Both STRINGS do Not Compare (different length or characters.)
  335.  
  336.    The last two conditional commands need two operands, separated by a comma.
  337. They may be delimited with Quotes (single or double), or by a left bracket
  338. '<' and right bracket '>' pair, or the first string will start at the first
  339. character which is not a space or a tab, and end at the first occurrence of a
  340. comma or space or tab, and the second will start at the next character which
  341. is not a comma or a space or a tab and will end at the first space, tab, semi-
  342. colon or newline character. To enclose spaces in the string, you must use
  343. either the quote or bracket delimiters. To enclose quotes, use the brackets,
  344. and to enclose brackets, use the quotes. Both quotes and brackets cannot be
  345. passed together unless you use the spaces, but then you can't have spaces in
  346. the string. Just shows to go you, everything is a compromise. Any backslash
  347. character sequences are not expanded before comparison (except inside Macros.)
  348.    Each Conditional command DO level ends with an ENDIF command. DO levels
  349. nest only to 16 levels, or a fatal error will be generated (whether the
  350. assembly is on or off, each IFxx increases the level count, and each ENDIF
  351. decreases the count; exceeding 16 or going below zero are fatal errors.) DO
  352. levels are not active during a macro definition, but will be evaluated during
  353. a macro expansion.
  354.  
  355. ==============================================================================
  356.  
  357.             Other Assembler Directives:
  358.  
  359.     RESERVE    Creates an uninitialized data storage area, with a size equal
  360.         to the expression following it. The size designators .B .W and
  361.         .L (any case) may be used, or WORD is assumed. The expression
  362.         following the Directive is expanded to the size specifier.
  363.         This is the only Directive which is not limited in size to 255
  364.         bytes for the result, but may yield up to 65,535 bytes.
  365.     ENDSRC    Shuts off assembly for the current DO level. (See the section
  366.         on conditional assembly for DO level explanation.) If you
  367.         are not in a DO level, the source is read to the end of
  368.         file, but no assembly action will occur.
  369.     OPTION    This command accepts the following operands only:
  370.  
  371.              M - Allows macro call lines to print in the
  372.                  assembly listing. (If List is on.) This
  373.                  is the default condition.
  374.             NM - Hides macro call lines, showing expansion
  375.                  lines only.
  376.              L - Turns on listing. (The default condition).
  377.             NL - Shuts off Listing.
  378.  
  379.         (Neither of these commands override the command-line
  380.         switches directly, they only control the flow of data.
  381.         An assembly will still create a list file if not prohibited,
  382.         Option NL will just make it an empty file. If the list
  383.         file was disabled on the command line, Option L will
  384.         not send the listing anywhere. None of the operands are
  385.         case-sensitive.)
  386.     TITLE    Accepts a STRING (delimited by quotes) which will label all
  387.         pages, if paging is not disabled. The Maximum title length
  388.         is 40 characters. Also cause pages to be numbered.
  389.     ORIGIN    Sets the program counter to the value of the expression
  390.         following the command. Origin remains relative on AMIGA
  391.         output format.
  392.     PAGEUP    Causes a page to end if paging is not disabled. A form-feed
  393.         character is sent, and a page heading with the optional
  394.         title (see TITLE) is printed.
  395.     SECTION    this command causes a new section, or Hunk, to be created in
  396.         the AMIGA output format. The first operand must be a name
  397.         containing no spaces and having less than 40 total characters.
  398.         The second operand, if given, should be separated by a comma
  399.         and should be either CODE, TEXT, DATA or BSS. If none is given,
  400.         CODE is assumed. (only the first character is checked, however,
  401.         so DUMMY will yield a DATA section definition.) TEXT is
  402.         equivalent to CODE. Case is not significant on the section
  403.         type, but case is important for the name. If the section name
  404.         has been used before, assembly will proceed at the next
  405.         location as was previously defined, and the resultant code,
  406.         data or storage space will be coalesced into one Hunk. AmigaDOS 
  407.         loads different hunks into different memory locations, so all
  408.         references to data between sections should be to Labels
  409.         declared as ENTRY (XDEF) to ensure assembly as absolute
  410.         locations. A warning is issued (unless shut off, see the
  411.         switches section) when this condition is detected. See the
  412.         AmigaDOS manual for more information on Hunks.
  413.     IDENTIFY   This command should be followed with a name, which will
  414.         be given to the program unit (a program unit is a hunk or a
  415.         collection of hunks to be fed to the linker.) Only the first
  416.         name given will be used, subsequent uses are ignored. If the
  417.         IDENTIFY command is not used during an assembly, the object
  418.         file will be given a name that has 0 characters in it. (Null
  419.         string.)
  420.     EXTERN    Followed by one or more Labels or symbols (separated by commas.)
  421.         These labels must not be defined within the  entire assembly
  422.         source, and cause the assembler to generate the appropriate
  423.         external reference instructions in the object file (AMIGA
  424.         format only) for resolution by the linker. Multiple EXTERN
  425.         usage on the same Symbol name is ignored.
  426.     ENTRY    Followed by one or more Labels or Symbols. These labels, which
  427.         need to be defined somewhere, allow locations within the
  428.         program unit to be visible to the linker to resolve other
  429.         program unit EXTERNal references. A program that consists of
  430.         more than one object file will need to have an ENTRY in one
  431.         unit for every EXTERN in the other units, or the program will
  432.         'BOMB' and probably either lock-up the machine or cause the
  433.         dreaded GURU to appear. References between different sections
  434.         must be to ENTRY labels, since the AMIGA loader will place
  435.         each section wherever it will fit, and resolve all these
  436.         different addresses. If you never use the section command,
  437.         the entire program will have to fit in the same place, and
  438.         might not be able to be loaded if there is not a spot big
  439.         enough for the whole thing (depending on how many tasks might
  440.         also be running, etc.) As for EXTERN, duplicate references
  441.         to the same name cause the second reference to be ignored.
  442.     EXECUTE    This command will pass the quote delimited string following
  443.         it to AmigaDOS during the second pass. The current window
  444.         is the input and output. A more detailed description of the
  445.         Execute routine is located in the AmigaDOS manual, but
  446.         basically the same things you can do from the CLI may be
  447.         contained within the string and executed from within the
  448.         assembler. The Source, Object and any open Include files
  449.         will be locked, and cannot be accessed at this time. No
  450.         use is made of the return value from the program called.
  451.     CNOP    This Directive causes null filler bytes to be inserted
  452.         into the object file until the desired alignment is
  453.         reached. There may be one or two values after the Directive,
  454.         separated a comma. The second value given, or the single value
  455.         is the desired alignment value you want, and the first value
  456.         when two values are given is how many more bytes to add beyond
  457.         this point. There may not be more than 255 bytes generated in
  458.         total to acheive the desired alignment, and no restrictions are
  459.         imposed on what alignment values can be used, but values that
  460.         are not powers of two will normally not generate a correct
  461.         alignment. If you want to set the Program Counter 2 bytes
  462.         beyond the next PC location evenly divisible by 8 use the
  463.         command like this:
  464.  
  465.             CNOP    2,8
  466.  
  467.         The predominant reason for using this command would be to
  468.         align data at specific offsets, and to create data structures
  469.         in specific formats.
  470.  
  471. ===============================================================================
  472.  
  473.             Include Files:
  474.  
  475.    Up to 8 levels of include files may be inserted into the assembly with the
  476. INCLUDE Directive. The syntax demands a Filename or Path, delimited by quotes.
  477. Include file directory searches are supported by command-line parameters (De-
  478. tailed in another section.) Include files may be called by Macros, and Macros
  479. may be used by Include files, up to their respective nesting levels (8 each.)
  480. The INCLUDE directive will cause the next source line to be read from the
  481. named file as if the entire contents appeared in the original source file,
  482. except line numbering will start at one again, and the line number will be
  483. followed by a '+' (plus) sign. When the end of the Include file is reached,
  484. the line number will revert to the one following the line which invoked the
  485. INCLUDE Command.
  486.    Special provisions have been made to allow automatic and command-line
  487. inclusion of header and/or macro definition files before assembly starts,
  488. and these files do not count in the nesting level limits for Include files.
  489. A later section will describe command-line parameters and the configuration
  490. file.
  491.  
  492. A SPECIAL NOTE: Several of the existing include files from Commodore do not
  493.         Assemble correctly (particularly those in the exec directory.)
  494.         Many of the source lines in these files contain comments
  495.         which are delimited only by spaces and an asterisk. Asm68k
  496.         is not restrictive about spaces within an expression, and
  497.         tries to assemble the asterisk as a multiplication operator
  498.         with the words in the comment being looked at as labels, and
  499.         gives appropriate error messages. Make sure the comments are
  500.         stripped or delimited by a semi-colon. A few of the files
  501.         contain Macro error checks using an IFC \1,'' which will not
  502.         assemble correctly with Asm68k. Use IFEQ NARG instead. the
  503.         FUNCDEF file contains an expression 4*-6, which will not be
  504.         interpreted correctly as written. Change this one to 4*(-6).
  505.         Lists.i contains a parenthesized expression as an offset
  506.         for an address register. Asm68k will not accept parentheses
  507.         within 68000 mnemonics except when they are immediate type,
  508.         as the parentheses denote a register designation. These changes
  509.         will make both assemblers happy, and the include files more
  510.         portable between applications.
  511.  
  512. ===============================================================================
  513.  
  514.              Macros:    
  515.  
  516.    The best feature of the assembler, and the hardest one to master, is the
  517. use of the MACRO command. A Macro is simply a sequence of source lines which
  518. may be saved and inserted as often as wanted just by using the name you gave
  519. it as a command. A Macro may contain any of the other Directives and Mnemonics
  520. the assembler recognizes except another MACRO definition command, although
  521. you may use the name of a defined Macro in your Macro (up to 8 levels deep.)
  522.    A Macro is defined (and it must be before being used) by placing the
  523. MACRO in the Mnemonic Field, either before or after it's name. The name for
  524. the Macro must follow the rules for Labels if it is on the left side, or if
  525. it is on the right side it needs to be separated by at least one space or
  526. tab from the MACRO Directive, and follow all the Label rules except it does
  527. not need to be followed by a colon. All the subsequent lines up to the one
  528. which contains the ENDMAC command will be saved for subsequent use.
  529.    The real power of Macros comes from their use with replacable parameters.
  530. When you issue a Macro name as a Command, up to ten parameters (numbered
  531. from one to nine, with zero for ten) may be included in a comma, space or
  532. bracket separated list after the name for use within the Macro text. To make
  533. these parameters appear in the Macro expansion, place a '\' (backslash)
  534. character followed immediately (no spaces) with the digit of the parameter you
  535. want in the definition. When the macro is expanded, the text will include the
  536. parameter placed on the calling line, and will be evaluated just as if the
  537. source had included it as it appears. Parameters are gathered and passed as
  538. they appear, quotes and all.
  539.    The backslash character may be passed to the Macro by including two
  540. backslashes in the calling line, and any non-numeric character following
  541. a backslash other than a backslash will pass both the backslash and the
  542. character following it to the Macro. To pass numeric sequences for use
  543. in a string (such as with the ASCII directive), use two backslashes [as
  544. in \\13, to put the sequence \13 , which puts a carriage return with the
  545. quoted string].
  546.    Conditional Directives are effective within the Macro, under the same rules
  547. as they follow elsewhere. If assembly is enabled, and the Directive MEXIT is
  548. encountered, expansion of the Macro is suspended, and the next source line
  549. will be the one following the Macro invocation line, after the assembler has
  550. examined the remaining Macro text and resolved all the IFxx and ENDIF levels.
  551.    To make Macros respond differently with different numbers of passed para-
  552. meters, the special symbol NARG (not case-sensitive) has been reserved. It will
  553. yield a value equal to the number of parameters found on the invocation line
  554. within a Macro expansion, and zero elsewhere.
  555.    One additional feature within Macros is the \@ (backslash followed by the
  556. at character). While the Macro is being expanded, this combination is changed
  557. to a period followed by three decimal digits. These digits increment starting
  558. from zero every time a macro call is made that uses the \@ combination, and
  559. will be used for the duration of that macro (a contained macro call will use a
  560. new number, then when it ends the former macro's number will be used until it
  561. ends. This allows unique symbol names to be generated within the Macro text,
  562. allowing branch instructions to occur. Local (numeric) Labels are effective
  563. within the Macro, but they do not attach to the Macro name, nor are they
  564. canceled by the Macro invocation (unless the invocation line was labeled.) Note
  565. that this sequence is significantly different from the usage in version 1.0.1.
  566.  
  567. ==============================================================================
  568.  
  569.             Do Nothing Directives:
  570.  
  571.    The following directives are accepted by the assembler, but cause no action
  572. and generate no code, just as if they were comments. They have been included
  573. to allow use of source code written for other assemblers.
  574.  
  575.     MASK2        FORMAT        SPC        
  576.     NOL        OFFSET
  577.  
  578.  
  579.             Synonym Directives:
  580.  
  581.    The directives in the left column are substitute names for the directives
  582. in the right column, and were included for source compatability:
  583.  
  584.         DS        RESERVE
  585.         END        ENDSRC
  586.         EQU        EQUATE
  587.         SET        SETVAL
  588.         TTL        TITLE
  589.         ENDC        ENDIF
  590.         ENDM        ENDMAC
  591.         RORG        ORIGIN
  592.         XDEF        EXTERN
  593.         XREF        ENTRY
  594.         RORIGIN        ORIGIN
  595.  
  596. ===============================================================================
  597.  
  598.             Unimplemented Directives:
  599.  
  600.    The following Directives, found in some other assemblers, have not been
  601. implemented in this version:
  602.  
  603.     IDNT        FAIL        LIST
  604.     LLEN        PAGE        PLEN
  605.     NOOBJ        NOLIST        NOPAGE
  606.  
  607.    A startup Macro file has been included with this package to allow some
  608. compatability if these are needed.
  609.  
  610. ===============================================================================
  611.  
  612.             Startup Configuration:
  613.  
  614.    If a file named Asm68k.cnf (or with a filename the same as the assembler
  615. with the extension .cnf) is found in the same directory spec the assembler was
  616. called from, it is read and acted on. The current version only looks for two
  617. items in this file, the pagelength (which must be greater than 11) and the
  618. name (and path) of the startup file. The format is:
  619.  
  620.     Page Length:    1 byte (11-255), binary
  621.     File Path:    up to 31 bytes, ascii
  622.     Terminator:    1 byte, binary, value 0
  623.  
  624.    Any remaining characters after the null byte are ignored. The assembler
  625. next looks for the filename or path given, and if this file is found, it
  626. is read and assembled as if it was the beginning of the Source file. All
  627. lines from this file are numbered 0, and no warning or error occurs if the
  628. file is not found (unless, of course, you were depending on these definitions
  629. in your program, then you could have lots of error messages.)
  630.    Beware when building this file that the null character must be at the end of
  631. the pathname or you may crash the system. You can create a file from the
  632. keyboard using the command:
  633.  
  634.         COPY con: to Asm68k.cnf
  635.  
  636. then typing a character for the pagelength (B is 66, the standard), following
  637. it with the pathname for the startup file, followed with a control@ (CTRL key
  638. and 2 key together), then ending it with a control\ (CTRL and \ keys together.)
  639. If you make a mistake, you cannot edit the file, so do the control\ and start
  640. over.
  641.  
  642. ===============================================================================
  643.  
  644.             Invoking the Assembler:
  645.  
  646.    The assembler is designed to be run only from the CLI interface. If you
  647. don't know how to find the CLI interface, read the manuals that came with
  648. the machine before trying to use this program.
  649.    The minimum invocation must be the program name (Asm68k) followed with a
  650. source filename (separated by at least one space from the program name.)
  651. This will yield an assembly, with an object file output in the AMIGA format,
  652. and a listing file. The filenames for these files will be created by
  653. stripping any extension (period followed by characters) from the source
  654. filename and appending .o for the object filename and .lst for the listing
  655. filename. Any error messages will list to the screen.
  656.  
  657.    Example:
  658.  
  659.         Asm68k MyProgram.a
  660.  
  661.    Outputs:
  662.  
  663.         MyProgram.o    (The relocatable binary object file)
  664.         MyProgram.lst    (A combined source and hex object file)
  665.  
  666.    If this isn't what you want, a wide variety of "switches" are supported
  667. to control the usage of the assembler, and the descriptions follow:
  668.    (A switch is a parameter you type after the program name and source
  669. filename, with an intervening space. These switches all start with the
  670. minus sign '-' and may be followed immediately by a letter or letters as
  671. shown below.)
  672.  
  673.     -O    Causes the OBJECT file to be generated (this is a default
  674.         value.) It may be followed immediately with a filename
  675.         containing no spaces, or type a space and then enclose the
  676.         filename in double quotes if it contains spaces. You may also
  677.         use the intervening space without quotes on a filename without
  678.         spaces if you like. A given object filename will be used
  679.         instead of the default filename normally used.
  680.     -L    Causes the LISTING file to be generated (also a default.) The
  681.         usage is just like the -O switch.
  682.     -E    Causes ERROR messages to list to the named file. Use like
  683.         above. On this switch, if no filename is given, a default
  684.         filename will be formed like the object and listing names,
  685.         using the extension .err
  686.     -V    VERIFICATION file. Another name for the -E switch.
  687.     -H    HEADER file. Causes a search for the filename given after the
  688.         switch (as above) which will be read as a source file before
  689.         the source file is read (but after the initialization file, if
  690.         enabled.) Just like the initialization file, if the file is not
  691.         found, no warning or error is issued directly. All the source
  692.         from this file will also be numbered as line 0.
  693.     -I    An INCLUDE directory search path list should follow this switch
  694.         and should contain directory names (no spaces allowed) separated
  695.         from each other with plus signs '+', commas or spaces. If
  696.         spaces are used, then you must space the list off from the
  697.         switch and enclose the entire list in double quotes. Use of
  698.         this switch will cause the assembler to search for an INCLUDE
  699.         file in each of the named directories if it is not found in
  700.         the current one.
  701.     -X    This switch should be followed immediately with up to 6
  702.         characters, and will cause the default object filename to be
  703.         formed by stripping the extension and appending a period and
  704.         the characters following the X.
  705.     -C    This switch has been included for compatability. It should
  706.         be followed with only the following characters, as many as
  707.         wanted, with no spaces:
  708.             S    Generates a symbol table at the end of the
  709.                 list file (this is a default value.)
  710.             D    Does nothing.
  711.             C    Causes Case of all Labels and symbols to
  712.                 be ignored. With this switch activated,
  713.                 LABEL, Label and label will all be interpreted
  714.                 as the same name. This is not the default.
  715.             X    Does nothing.
  716.     -N    This switch turns things off (NO.) Like -C, you should follow
  717.         it with a series of letters from the following list, without
  718.         any spaces:
  719.             S    Turns off the SYMBOL table normally produced
  720.                 at the end of the listing file.
  721.             L    Stops the LISTING file from being generated.
  722.             E    Inhibits the ERROR file, if you turned it on.
  723.             V    A synonym for the E switch above.
  724.             P    Inhibits the PAGINATION of the listing file.
  725.             O    Inhibits the OBJECT file generation.
  726.             Q    Inhibits the conversion of mnemonics to QUICK
  727.                 form. The default is to convert allowable
  728.                 values of ADD and SUB to the quick form if it
  729.                 is safe (values already defined.)
  730.             X    Keeps the assembler from stripping the eXten-
  731.                 sion from the source filename when forming
  732.                 default filenames.
  733.             R    Causes the assembler to generate the object
  734.                 code in a non-RELATIVE format. The format
  735.                 used is the Intel format, and the program
  736.                 counter is only output to 16-bits of
  737.                 significance. No symbol or relocation infor-
  738.                 mation is output, and no linker or loader
  739.                 is available to operate on this format.
  740.     -R    This is the relax switch. The following parameters should
  741.         follow the switch immediately, with no spaces:
  742.             M    Stops the assembler from reporting that less
  743.                 parameters were supplied for a macro than
  744.                 were called.
  745.             R    Eliminates messages about relative references
  746.                 to other sections. Note that any mnemonic
  747.                 that has a PC-relative mode available will
  748.                 still assemble as PC-relative, and will not
  749.                 run on the Amiga. Declare all references
  750.                 between sections as ENTRY (XDEF). The linker
  751.                 can be used so as not to include resolved
  752.                 references in the load file.
  753.     >    The right bracket, followed immediately with a filename, will
  754.         cause the signon, progress and all error messages to be
  755.         diverted by AmigaDOS to the named file when it is the first
  756.         parameter after the program name. If it is not the first,
  757.         the assembler will send the error messages to the named file.
  758.  
  759.    All the above switches may be used in either UPPER or lower case, and will
  760. generate the same results. The source filename should be the first parameter
  761. after the program name, but only to avoid confusion. It must be the only
  762. parameter not associated with a switch, and may not be given twice. The source
  763. filename is the only mandantory command-line parameter.
  764.  
  765. ==============================================================================
  766.  
  767.             Other notes on use:
  768.  
  769.    Case is normally significant on Symbols, Labels and Macro names unless the
  770. -CC switch is used. The Directives, Mnemonics and special symbols will be
  771. recognized in any mixture of UPPER and lower case.
  772.    The only truly reserved symbols are the following:
  773.  
  774.         NARG    MACRO    ENDMAC    ENDM    A0
  775.         A1    A2    A3    A4    A5
  776.         A6    A7    D0    D1    D2
  777.         D3    D4    D5    D6    D7
  778.         SP    CCR    USP    SR    PC
  779.  
  780.    All the other special Symbols, Mnemonics and Directive names  may be defined
  781. and used as Labels, or may be implemented as Macros, but be careful when doing
  782. this to avoid circular references, which will not be detected until the Macro
  783. nesting level is exceeded, or a write error results from the disk being full.
  784.    For example, if you redefine JSR as a Macro, and want to use it in the
  785. Macro definition, don't call the assembler with the -CC switch, and be sure
  786. to use a different case within the Macro text to get the assembler to recog-
  787. nize the Mnemonic, which is case-insensitive, from the Macro name. This allows
  788. the maximum flexibility for the assembler, with only a minimum of care from
  789. the programmer.
  790.  
  791. ==============================================================================
  792.  
  793.             Error Messages:
  794.  
  795.    The assembler uses as much logic as possible to generate a line of code
  796. in spite of erroneous input. If a reliable evaluation can be made, a source
  797. line will be interpreted regardless of errors, however some of these lines
  798. may not be what you meant. Even the little bit of DWIM in this assembler
  799. occupies a lot of code space. Because assembly of erroneous lines is attempted
  800. where possible, you may find multiple error messages referring to the same
  801. line. The listing file will only contain the first error detected, however the
  802. screen list or error file will also list the errors in the order they were
  803. detected. Some errors may generate errors later, especially if typing errors
  804. cause the assembler to find an item it thinks is an undefined symbol in an
  805. expression, and you later used this symbol for another purpose. The following
  806. is a list of error messages, and explanations:
  807.  
  808.      1: Error in Expression Value
  809.         The expression being evaluated contained some garbage.
  810.      2: Duplicate Line Label
  811.         An attempt at defining a Label twice was detected. This
  812.         error does not apply to ENTRY and EXTERN label types.
  813.      3: Undefined Label in Expression
  814.         The symbol or label used in the expression was not defined
  815.         anywhere in the source file.
  816.      4: Syntax Error
  817.         The assembler could make no sense of what you were trying to
  818.         tell it to do.
  819.      5: Operand Too Large
  820.         The operand was greater than the value allowed for the
  821.         operation being performed.
  822.      6: Invalid Register Specified
  823.         The register called for in the current operation and what
  824.         was found are not compatable.
  825.      7: Undefined Mnemonic or Command
  826.         An item in the Mnemonic field is not a defined Macro or
  827.         valid mnemonic or directive. May also be caused by using
  828.         a label outside of column one without a colon following it.
  829.      8: Improper use of Unary Operator
  830.         A Unary operator ('-' or '~') was found right after another
  831.         math operator. The expression evaluator cannot handle this,
  832.         so it is ignored and this message is output.
  833.      9: Division by Zero
  834.         A Division or Modulo operation was attempted where the right
  835.         hand value was zero or undefined. The result of this operation
  836.         is set to zero.
  837.     10: Too Many Right Parentheses
  838.         More right parentheses were found than left parentheses.
  839.     11: Missing Right Parenthesis
  840.         More left parentheses were used than right parentheses.
  841.     12: Too Many Parenthesis Levels
  842.         More than 16 levels of parentheses were attempted to
  843.         be opened.
  844.     13: Invalid Character in Expression
  845.         A character was found in the expression that is not
  846.         any of the defined mathops, numbers, symbol characters
  847.         or newline characters.
  848.     14: Closing Quote Absent
  849.         No closing quote on a character constant was found.
  850.     15: Operand Field Missing
  851.         An operand was needed, and was not there.
  852.     16: Bit Operand Required
  853.         The expression needs a bit operand, and what was found was
  854.         not of the required type.
  855.     17: Invalid Bit Specified
  856.         The data found cannot be used legally to specify a bit.
  857.     18: Immediate (#) Operand Needed
  858.         The data given was not preceded by the '#' (pound) sign,
  859.         and needed to be.
  860.     19: Branch or Jump Out-of-Range
  861.         The address evaluated is outside of the range allowable for
  862.         the branch of jump mnemonic specified.
  863.     ** Command Line Required **
  864.         The message output when no arguments are present on the
  865.         command-line (you need at least the source filename.)
  866.         Also a Fatal error.
  867.     ** Unrecognized Switch **
  868.         A switch or a character within a switch was not one of
  869.         the valid switches. Not a Fatal error.
  870.     ** File Write Error **
  871.         An error occurred during a file write, as reported from
  872.         AmigaDOS. May be caused by a full disk.
  873.     ** Source Filename Missing **
  874.         The source filename was not present, corrupt or was given
  875.         twice. A Fatal error.
  876.     ** Parameter Too Long **
  877.         An Item on the command-line was too long to be evaluated.
  878.         Also Fatal.
  879.     ** Insufficient Free Memory **
  880.         This error occurs when the memory pool does not contain
  881.         enough memory in a size large enough for the request
  882.         from the assembler to be filled. Execution stops
  883.         immediately.
  884.     ** Too many Include Files **
  885.         This error occurs when you try to open the ninth Include
  886.         file before closing one.
  887.     ** Couldn't open Source file **
  888.         AmigaDOS did not return information indicating that the source
  889.         file was ready to be read from (or it isn't there.) No
  890.         assembly will take place without a source file.
  891.     ** Couldn't open Object file **
  892.         A Dos error occurred trying to open the object file.
  893.     ** Couldn't open Listing file **
  894.         Same error from listing file open attempt.
  895.     ** Couldn't open Error file **
  896.         Like above, but on error file attempt.
  897.     33: ENDMAC Command missing
  898.         The end of the source file was reached, and the assembler
  899.         was still saving a macro definition.
  900.     34: Too Many Parameters present
  901.         More parameters than the assembler has space to store
  902.         were found.
  903.     35: Parameter Too Long
  904.         An item in an expression or an operand was longer than the
  905.         defined limit.
  906.     36: Closing Quote Missing
  907.         A string definition should be bounded on both ends with
  908.         matching quotes.
  909.     37: No Label on Line
  910.         No label was present for the Directive to act upon.
  911.     38: Macro called using Symbol label
  912.         A symbol name found in the mnemonic field was attempted
  913.         to be used as a Macro, and was found to be a Label.
  914.     ** Too many nested Macros **
  915.         This Fatal error occurs when the ninth Macro call is
  916.         issued before any of the previous Macro calls have ended.
  917.     40: Macro redefinition Error
  918.         The name used with the MACRO command is already the name
  919.         of a previously defined Macro.
  920.     41: ENDMAC command without MACRO definition
  921.         You didn't use the MACRO command to define your Macro, or
  922.         you issued the ENDMAC command twice. If you are attempting
  923.         to get two or more exit points from a macro, use the
  924.         MEXIT Directive.
  925.     ** INCLUDE file unable to be opened **
  926.         This Error occurs when the filename associated with the
  927.         INCLUDE command was not found after the include directory
  928.         list was exhausted.
  929.     ** Source or Include file line too long **
  930.         An input line read from disk contained more than 255
  931.         characters in a row without a carriage return or
  932.         linefeed.
  933.     44: Not enough Macro parameters supplied
  934.         An expansion was attempted and there were not enough
  935.         parameters on the Macro call line. This may be relaxed
  936.         with a command-line switch.
  937.     45: Label Value changed between passes
  938.         This unusual error occurs when the value of a Line Label
  939.         is different on the second pass than it was on the first
  940.         pass. The whole assembly file is probably corrupt, and
  941.         it is likely that the message will repeat with every
  942.         subsequent Line Label found. Forward references and
  943.         absolute references to SETVAL Labels, or conditional
  944.         compilation based on SETVAL Labels are the likely
  945.         culprits behind this error.
  946.     46: Invalid Label - Forward Referenced
  947.         A Label which was referenced before it was used was later
  948.         found in a context other than usage as a relative location.
  949.     47: Local Definition of External Symbol not allowed
  950.         If you declared a Symbol to be EXTERNal, you cannot define
  951.         it within the current assembly. Use the ENTRY Directive
  952.         instead if this is what you want.
  953.     48: Unavailable Addressing Mode Used
  954.         The addressing mode used for the Mnemonic on this
  955.         line is not one which is allowable for that
  956.         Mnemonic.
  957.     49: Invalid Item in External Reference Expression
  958.         An external reference included an item which did not
  959.         belong there. This also occurs on an attempt to
  960.         generate PC relative references to external addresses.
  961.     ** Too Many Section Definitions (Limit = 255) **
  962.         The message is self-explanatory.
  963.     51: Invalid Section Type - Section CODE used
  964.         An item found after the section name was not one of the valid
  965.         section types - CODE, TEXT, DATA or BSS. The type is set to
  966.         CODE.
  967.     52: Alignment Error - Pad Byte Added
  968.         All the 68000 Mnemonics and WORD and LONG oriented Directives
  969.         need to be aligned on an even address. The Assembler attempts
  970.         to correct this by adding a null byte to the previous
  971.         instruction, and adjusts the Program Counter and Label values
  972.         accordingly.
  973.     ** Too Many Conditional Levels Attempted
  974.         The seventeenth conditional Directive was found before an
  975.         ENDIF Directive was.
  976.     ** Conditional End without Conditional Statement
  977.         There are more ENDIF commands than matching conditional
  978.         Directives.
  979.     55: Relative Reference Outside of Current Section
  980.         An attempt to use a PC relative mode to a Line Label that
  981.         was not declared as an ENTRY label was attempted. Also
  982.         occurs on Data references to other sections without
  983.         using the ENTRY type-definition. This message may be
  984.         suppressed with a command-line switch.
  985.     56: Code not allowed in Data & Bss Sections
  986.         DATA sections may contain only initialized and uninitialized
  987.         data locations, and BSS sections may contain only un-
  988.         initialized (RESERVE) data.
  989.     57: Redefinition of an Equate not Allowed
  990.         You cannot change the value of a Label that has been EQUATEd.
  991.     58: Equate to previously SET Label Disallowed
  992.         A Label that was set cannot later be upgraded to an equate
  993.         in the same assembly. The assembler handles decisions on
  994.         equated labels, whose value cannot change, differently
  995.         than set labels, whose value may be redefined. Since the
  996.         length of 68000 instructions vary with the address mode,
  997.         a set label is always treated as a LONG value (unless
  998.         otherwise specified) and an equated label is treated
  999.         for the value it contains. Since the assembler always
  1000.         attempts to use the shortest instruction length possible,
  1001.         a change in the type of a label can cause bad code to be
  1002.         generated.
  1003.  
  1004. ===============================================================================
  1005.  
  1006.             Addressing Modes:
  1007.  
  1008.    The following models show the valid address modes for the 68000 processor
  1009. as they are recognized by the assembler:
  1010.     ( 'n' represents a digit from 0 to 7, X represents either 'D' or 'A'
  1011.       for an address mode 'ALabel' represents a symbol with an absolute
  1012.       or an external value, 'RLabel' represents a Line Label or an
  1013.       ENTRY typed label, 'number' refers to an actual numerical value, and
  1014.       the other items are what they are. Case is not significant except on
  1015.       Label and Symbol Names. Defined REG Labels of the proper type may be
  1016.       used in place of the register names.)
  1017.  
  1018. IMMEDIATE:            #number        #ALabel
  1019.  
  1020. DATA REGISTER DIRECT:        Dn
  1021.  
  1022. ADDRESS REGISTER DIRECT:    An    SP
  1023.  
  1024. ADDRESS REGISTER INDIRECT:    (An)    (SP)
  1025.  
  1026. ADDRESS REGISTER INDIRECT WITH POST INCREMENT:        (An)+    (SP)+
  1027.  
  1028. ADDRESS REGISTER INDIRECT WITH PREDECREMENT:        -(An)    -(SP)
  1029.  
  1030. ADDRESS REGISTER INDIRECT WITH DISPLACEMENT:        number(An)
  1031.                             number(SP)
  1032.                             ALabel(An)
  1033.                             ALabel(SP)
  1034.  
  1035. ADDRESS REGISTER INDIRECT WITH DISPLACEMENT AND INDEX:    number(An,Xn)
  1036.                             Alabel(An, Xn)
  1037.                             number(SP, Xn)
  1038.                             ALabel(SP,Xn)
  1039.  
  1040. PROGRAM COUNTER RELATIVE WITH DISPLACEMENT:        RLabel
  1041.                             RLabel(PC)
  1042.                             number(PC)
  1043.  
  1044. PROGRAM COUNTER RELATIVE WITH DISPLACEMENT AND INDEX:    RLabel(Xn)
  1045.                             RLabel(PC, Xn)
  1046.                             number(PC, Xn)
  1047.  
  1048. SHORT ABSOLUTE:        ALabel        number
  1049.  
  1050. (where the value is less than $007FFF or greater than $FF8000)
  1051.  
  1052. LONG ABSOLUTE:        RLabel (to another section)
  1053.             ALabel        number
  1054.  
  1055. (where the value doesn't qualify for short mode)
  1056.  
  1057. SPECIAL:        USP        CCR        SR
  1058.  
  1059. ===============================================================================
  1060.  
  1061.             Release History:
  1062.  
  1063.    Version 1.0.1 Alpha1.........released 02-Jan-87.
  1064.    Version 1.0.1 Beta1..........released 11-Jan-87.
  1065.    Version 1.0.1 Beta2..........released 20-Jan-87.
  1066.    Version 1.0.1................released 28-Feb-87.
  1067.    Version 1.0.2................released 14-Apr-87.
  1068.     Changes:     1. Error messages now also contain the name of the
  1069.                 file containing the error.
  1070.              2. DB (and DC.B) now correctly handle multiple operands
  1071.                 and character strings that contain spaces no longer
  1072.                 have the spaces removed.
  1073.              3. The parameters on a macro call line are passed to
  1074.                 the macro quotes and all.
  1075.              4. The expression evaluator will now accept multiple
  1076.                 character sequences, instead of just a single ascii
  1077.                 character. No specific limit is set on how many
  1078.                 characters can be included, but only the last four
  1079.                 will be retained.
  1080.              5. The length specification on 68000 mnemonics using
  1081.                 one of the indexing modes is now passed to the
  1082.                 object code. (Only .L results in a different object
  1083.                 output. .W is assumed for all others.)
  1084.              6. The REG command now works with single registers as
  1085.                 well as register lists.
  1086.              7. Error 41 is now called as described.
  1087.              8. Source lines containing only a label are now present
  1088.                 in the listing file.
  1089.              9. References to #Label items which are not declared
  1090.                 as ENTRY (XDEF) will not stomp on low memory and
  1091.                 crash the system.
  1092.             10. Program size has been reduced.
  1093.             11. The assembler is now as much as 58% faster than
  1094.                 before. Benchmarks show it to be about 2 1/2 times
  1095.                 as fast as some other assemblers available.
  1096.             12. The Heap space usable has been increased by a
  1097.                 factor of 4.
  1098.             13. The \@ sequence is treated differently, with the
  1099.                 resultant 3-digit sequence remaining constant
  1100.                 for each macro level encountered, and being
  1101.                 incremented by each macro call, instead of the
  1102.                 strict pairing used in V.1.0.1.
  1103.    Version 1.0.3................released 24-Apr-87.
  1104.     Changes:     1. Error messages no longer are generated in the case
  1105.                 of EXTERN or ENTRY type multiple definitions.
  1106.                 More precisely, the second or subsequent usage is
  1107.                 ignored.
  1108.              2. The counter for \@ has been changed so that it is
  1109.                 not incremented unless it is used by a macro. In
  1110.                 version 1.0.2, each macro call incremented the
  1111.                 counter, causing overflow in large source files
  1112.                 before 999 uses. This change should not cause the
  1113.                 need for source changes in files that assembled
  1114.                 correctly under the previous release, although a
  1115.                 reassembly will have different values used.
  1116.              3. The expression evaluator has been changed slightly
  1117.                 on the rules regarding the use of the '*' op for
  1118.                 the PC location. This corrects prior problems in-
  1119.                 volving the assembler confusing the two uses that
  1120.                 made multiplication fail.
  1121.              4. Labels and symbols that begin with a period will
  1122.                 now be recognized within expressions.
  1123.  
  1124. ===============================================================================
  1125.  
  1126.    A special note of gratitude to various members of ASDF (Amiga Software
  1127. Developers Forum), The Software Distillery (whose BLink reduced the many
  1128. hours spent relinking the source files during development), and especially
  1129. John Toebes, whose offhand remarks unknowingly provided much of the inspiration
  1130. to keep going. Also DJ JAMES and KEN S for their work in running down some
  1131. of the problems I missed.
  1132.  
  1133. ===============================================================================
  1134.  
  1135. NOTE:    Amiga and AmigaDOS are trademarks of Commodore Business Machines.
  1136.     Intel is a trademark of the Intel Co.
  1137.     MC68000 is a trademark of Motorola Co.
  1138.  
  1139. ===============================================================================
  1140.  
  1141.             <*|=|*>  THE END  <*|=|*>
  1142.  
  1143. ==============================================================================
  1144.